// 使用require.context
// 2.一个标记表示是否还要搜索其子目录
// 3.一个匹配文件的正则表达式

require.context("../pages")
let files = require.context("../pages", true, /\.vue$/)  //修改文件路径-------------------------------------------

// console.log(files.keys());

let repeatRoutes = files.keys().map(path => {
    // 1.需要吧path:"./Home/Users/index.vue"这样的变成 /Home/Users,
    // 使用正则过滤掉 /index.vue 或者过滤掉 .vue
    let regExp = /(\/index\.vue|\.vue)$/
    let com = files(path).default
    path = path.replace(regExp, "").substring(1)
    // console.log(com.meta);
    // console.log(path);
    return {
        // 路由重定向
        redirect: com.redirect ?? null,
        name:com.name ?? path.substring(1).split("/").join("-"),
        meta:com.meta ?? {}, // 路由原信息
        path: path.toLowerCase(),
        component: () => import("@/pages" + path)
    }
});
//console.log(repeatRoutes); // 扁平化路由配置
// 需要把转成repeatRoutes转成"树形"数据
const convertTree = (repeatRoutes) => {
    // 每条数据添加id、如果是嵌套路由、那么加上pid
    // pid
    let treeRoues = [];  //声明一个空数组用于存放树形的routers配置
    // 遍历repeatRoutes 对数据的id进行处理
    repeatRoutes.forEach(route => {
        // 将path作为当前对象的id
        let pathArr = route.path.substring(1).split("/");
        // 给每个对象生成id
        route.id = pathArr.join("-")
        // console.log(pathArr);
        // 如果数组中的长度大于1 说明是子路由 需要添加pid
        if (pathArr.length > 1) {
            // pid就是parentid 父级id 数组中的最后一项去掉 就是父级id了
            let pidArr = [...pathArr]//浅拷贝
            pidArr.pop()
            route.pid = pidArr.join("-")
        }
    })
    // 把平铺数据，变成嵌套的属性数据
    repeatRoutes.forEach(route => {
        // 找数据pid和数据id相等的项
        let parent = repeatRoutes.find(v => v.id === route.pid);
        // console.log(parent)
        if (parent) {
            // 当前的route对象,找到父节点了
            // 判断父节点有没有children属性，如果没有就创建
            if (!parent.children) {
                parent.children = [];
            }
            route.path = route.path.split('/').pop() // ['','home','users','aa']
            parent.children.push(route)
        } else {
            treeRoues.push(route)
        }
    
    })
    return treeRoues
}
let result = convertTree(repeatRoutes)
// console.log(result);

export default result